Instalação e importação dos pacotes
# install.packages("ggplot2")
# install.packages("data.table")
# install.packages("stargazer")
# install.packages("skimr")
library(ggplot2)
library(data.table)
library(stargazer)
library(skimr)
library(readxl)
library(dplyr)
Criação da função que gera os gráficos.
### FUNÇÃO
box_plot = function(data, atributos, atributosSubgrupo, variavelDependente = 'Evadiu_formatado'){
for (atributo in atributos) {
if(length(atributosSubgrupo) > 0){
for (atributo2 in atributosSubgrupo){
result = ggplot(data = dtAmostra, aes_string(variavelDependente, atributo)) +
geom_boxplot(aes_string(fill = atributo2)) +
# geom_boxplot() +
labs(x = variavelDependente,
y = atributo,
title = "Boxplot",
subtitle = paste(atributo, variavelDependente, sep = " vs "),
caption = "") +
theme_bw()
# facet_wrap(~ atributo2)
print(result)
}
}
else{
result = ggplot(data = dtAmostra, aes_string(variavelDependente, atributo)) +
geom_boxplot() +
labs(x = variavelDependente,
y = atributo,
title = "Boxplot",
subtitle = paste(atributo, variavelDependente, sep = " vs "),
caption = "") +
theme_bw()
# facet_wrap(~ atributo2)
print(result)
}
}
}
Leitura do arquivo feita e análise dos dados
dtAmostra <- fread("dadosBanco/Amostra_Modelo_Evasao_Correntistas_v3.csv")
str(dtAmostra)
## Classes 'data.table' and 'data.frame': 100000 obs. of 36 variables:
## $ Id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Evadiu : int 0 1 1 0 1 0 0 0 1 1 ...
## $ Segmento : chr "GR" "GC" "GC" "GV" ...
## $ Debito_Automatico : int 0 0 0 0 0 1 1 0 0 0 ...
## $ Credito_Salario : int 1 1 0 0 0 0 1 0 1 0 ...
## $ Credenciamento : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Caixa_Seguradora : int 1 0 0 0 0 1 1 1 0 0 ...
## $ Pediu_Portabilidade : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Abriu_Reclamacao : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Debito_Automatico_DIF : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Credito_Salario_DIF : int 1 1 0 0 0 0 0 0 0 0 ...
## $ Caixa_Seguradora_DIF : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Produtos_Qualificados : int 6 0 5 4 5 6 11 8 3 3 ...
## $ Produtos_Qualificados_Anterior: int 8 1 6 3 5 5 8 10 3 3 ...
## $ Produtos_Qualificados_DIF : int -2 -1 -1 1 0 1 3 -2 0 0 ...
## $ Produtos_Qualificados_PERC : num -25 -100 -16.7 33.3 0 ...
## $ Produtos : int 6 6 5 4 6 8 14 9 5 3 ...
## $ Produtos_Anterior : int 9 1 6 3 6 7 11 11 4 3 ...
## $ Produtos_DIF : int -3 5 -1 1 0 1 3 -2 1 0 ...
## $ Produtos_PERC : num -33.3 500 -16.7 33.3 0 ...
## $ Movimentacoes : num 19.833 0.5 0.833 5.5 0.667 ...
## $ Movimentacoes_Anterior : num 1 0 1.17 6.5 3.5 ...
## $ Movimentacoes_DIF : num 18.833 0.5 -0.333 -1 -2.833 ...
## $ Movimentacoes_PERC : num 1883.3 0 -28.6 -15.4 -81 ...
## $ Aplicacao : num 13818.1 412.6 4268.3 10.1 85.6 ...
## $ Aplicacao_Anterior : num 47067.83 7.04 1353.43 0 689.75 ...
## $ Aplicacao_DIF : num -33249.7 405.6 2914.8 10.1 -604.1 ...
## $ Aplicacao_PERC : num -70.6 5760.7 215.4 0 -87.6 ...
## $ Credito : num 0 0 0 54380 37511 ...
## $ Credito_Anterior : num 261 0 173110 56118 37511 ...
## $ Credito_DIF : num -261 0 -173110 -1738 0 ...
## $ Credito_PERC : num -100 0 -100 -3.1 0 ...
## $ Rentabilidade : num 1010 1 5615 1664 650 ...
## $ Rentabilidade_Anterior : num 1009.29 2.88 5300.06 1233.58 2178.44 ...
## $ Rentabilidade_DIF : num 0.96 -1.88 315.24 430.46 -1528.05 ...
## $ Rentabilidade_PERC : num 0.0951 -65.2778 5.9479 34.8952 -70.1442 ...
## - attr(*, ".internal.selfref")=<externalptr>
Como é possível verificar, existem uma série de dados que são caracterizados como inteiro, porém na verdade são variáveis que servem para classificar um determinado cliente.
Dessa forma, as variáveis foram transformadas em fatores.
dtAmostra$Evadiu <- as.factor(dtAmostra$Evadiu)
dtAmostra$Debito_Automatico <- as.factor(dtAmostra$Debito_Automatico)
dtAmostra$Credito_Salario <- as.factor(dtAmostra$Credito_Salario)
dtAmostra$Credenciamento <- as.factor(dtAmostra$Credenciamento)
dtAmostra$Caixa_Seguradora <- as.factor(dtAmostra$Caixa_Seguradora)
dtAmostra$Pediu_Portabilidade <- as.factor(dtAmostra$Pediu_Portabilidade)
dtAmostra$Abriu_Reclamacao <- as.factor(dtAmostra$Abriu_Reclamacao)
dtAmostra$Debito_Automatico_DIF <- as.factor(dtAmostra$Debito_Automatico_DIF)
dtAmostra$Credito_Salario_DIF <- as.factor(dtAmostra$Credito_Salario_DIF)
dtAmostra$Caixa_Seguradora_DIF <- as.factor(dtAmostra$Caixa_Seguradora_DIF)
dtAmostra = dtAmostra %>% mutate(Evadiu_formatado = ifelse(Evadiu == 1, "Sim", "Não"))
str(dtAmostra)
## 'data.frame': 100000 obs. of 37 variables:
## $ Id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Evadiu : Factor w/ 2 levels "0","1": 1 2 2 1 2 1 1 1 2 2 ...
## $ Segmento : chr "GR" "GC" "GC" "GV" ...
## $ Debito_Automatico : Factor w/ 2 levels "0","1": 1 1 1 1 1 2 2 1 1 1 ...
## $ Credito_Salario : Factor w/ 2 levels "0","1": 2 2 1 1 1 1 2 1 2 1 ...
## $ Credenciamento : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ Caixa_Seguradora : Factor w/ 2 levels "0","1": 2 1 1 1 1 2 2 2 1 1 ...
## $ Pediu_Portabilidade : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
## $ Abriu_Reclamacao : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
## $ Debito_Automatico_DIF : Factor w/ 3 levels "-1","0","1": 2 2 2 2 2 2 2 2 2 2 ...
## $ Credito_Salario_DIF : Factor w/ 3 levels "-1","0","1": 3 3 2 2 2 2 2 2 2 2 ...
## $ Caixa_Seguradora_DIF : Factor w/ 3 levels "-1","0","1": 2 2 2 2 2 2 2 2 2 2 ...
## $ Produtos_Qualificados : int 6 0 5 4 5 6 11 8 3 3 ...
## $ Produtos_Qualificados_Anterior: int 8 1 6 3 5 5 8 10 3 3 ...
## $ Produtos_Qualificados_DIF : int -2 -1 -1 1 0 1 3 -2 0 0 ...
## $ Produtos_Qualificados_PERC : num -25 -100 -16.7 33.3 0 ...
## $ Produtos : int 6 6 5 4 6 8 14 9 5 3 ...
## $ Produtos_Anterior : int 9 1 6 3 6 7 11 11 4 3 ...
## $ Produtos_DIF : int -3 5 -1 1 0 1 3 -2 1 0 ...
## $ Produtos_PERC : num -33.3 500 -16.7 33.3 0 ...
## $ Movimentacoes : num 19.833 0.5 0.833 5.5 0.667 ...
## $ Movimentacoes_Anterior : num 1 0 1.17 6.5 3.5 ...
## $ Movimentacoes_DIF : num 18.833 0.5 -0.333 -1 -2.833 ...
## $ Movimentacoes_PERC : num 1883.3 0 -28.6 -15.4 -81 ...
## $ Aplicacao : num 13818.1 412.6 4268.3 10.1 85.6 ...
## $ Aplicacao_Anterior : num 47067.83 7.04 1353.43 0 689.75 ...
## $ Aplicacao_DIF : num -33249.7 405.6 2914.8 10.1 -604.1 ...
## $ Aplicacao_PERC : num -70.6 5760.7 215.4 0 -87.6 ...
## $ Credito : num 0 0 0 54380 37511 ...
## $ Credito_Anterior : num 261 0 173110 56118 37511 ...
## $ Credito_DIF : num -261 0 -173110 -1738 0 ...
## $ Credito_PERC : num -100 0 -100 -3.1 0 ...
## $ Rentabilidade : num 1010 1 5615 1664 650 ...
## $ Rentabilidade_Anterior : num 1009.29 2.88 5300.06 1233.58 2178.44 ...
## $ Rentabilidade_DIF : num 0.96 -1.88 315.24 430.46 -1528.05 ...
## $ Rentabilidade_PERC : num 0.0951 -65.2778 5.9479 34.8952 -70.1442 ...
## $ Evadiu_formatado : chr "Não" "Sim" "Sim" "Não" ...
A variável Pediu_Portabilidade possui um valor constante e, por conta disso, foi retirada.
Como o interesse é buscar predizer a variável Evadiu, verificamos todas as outras variáveis em conjunto com a variável alvo para verificar o resultado.
No entanto, nos deparamos com algo do tipo:
box_plot(credit, c("Aplicacao"), NULL)
Ou seja, existem outliers com valores muito altos e que, na verdade, não estão dentro da maioria dos dados relevantes (75%).
Assim, aplicamos uma função chamada winsor que tem a função de eliminar esses outliers, como foi feito abaixo:
dtAmostra = dtAmostra %>%
mutate(winsored_Rentabilidade_PERC = psych::winsor(Rentabilidade_PERC, 0.1)) %>%
mutate(winsored_Produtos = psych::winsor(Produtos, 0.01)) %>%
mutate(winsored_Produtos_Qualificados_PERC = psych::winsor(Produtos_Qualificados_PERC, 0.01)) %>%
mutate(winsored_Produtos_PERC = psych::winsor(Produtos_PERC, 0.01)) %>%
mutate(winsored_Movimentacoes = psych::winsor(Movimentacoes, 0.1)) %>%
mutate(winsored_Movimentacoes_Anterior = psych::winsor(Movimentacoes_Anterior, 0.1)) %>%
mutate(winsored_Movimentacoes_DIF = psych::winsor(Movimentacoes_DIF, 0.1)) %>%
mutate(winsored_Movimentacoes_PERC = psych::winsor(Movimentacoes_PERC, 0.1)) %>%
mutate(winsored_Aplicacao = psych::winsor(Aplicacao, 0.1)) %>%
mutate(winsored_Aplicacao_Anterior = psych::winsor(Aplicacao_Anterior, 0.1)) %>%
mutate(winsored_Aplicacao_DIF = psych::winsor(Aplicacao_DIF, 0.1)) %>%
mutate(winsored_Aplicacao_PERC = psych::winsor(Aplicacao_PERC, 0.1)) %>%
mutate(winsored_Credito = psych::winsor(Credito, 0.1)) %>%
mutate(winsored_Credito_Anterior = psych::winsor(Credito_Anterior, 0.1)) %>%
mutate(winsored_Credito_DIF = psych::winsor(Credito_DIF, 0.1)) %>%
mutate(winsored_Credito_PERC = psych::winsor(Credito_PERC, 0.1)) %>%
mutate(winsored_Rentabilidade = psych::winsor(Rentabilidade, 0.1)) %>%
mutate(winsored_Rentabilidade_Anterior = psych::winsor(Rentabilidade_Anterior, 0.1)) %>%
mutate(winsored_Rentabilidade_DIF = psych::winsor(Rentabilidade_DIF, 0.1)) %>%
mutate(winsored_Rentabilidade_PERC = psych::winsor(Rentabilidade_PERC, 0.1))
Feito isso, rodamos novamente os gráficos para verificarmos quais das variáveis mais seria interessante de se usar como preditora da variável alvo.
Segue resultado abaixo:
variaveisIniciais <- c("Produtos",
"Produtos_Anterior",
"Produtos_DIF",
"winsored_Produtos_Qualificados_PERC",
"Produtos_Qualificados_DIF",
"Produtos_Qualificados_Anterior",
"Produtos_Qualificados",
"winsored_Produtos_PERC",
"winsored_Aplicacao",
"winsored_Aplicacao_Anterior",
"winsored_Aplicacao_PERC",
"winsored_Aplicacao_DIF",
"winsored_Movimentacoes",
"winsored_Movimentacoes_DIF",
"winsored_Movimentacoes_PERC",
"winsored_Movimentacoes_Anterior",
"winsored_Credito",
"winsored_Credito_Anterior",
"winsored_Credito_PERC",
"winsored_Credito_DIF",
"winsored_Rentabilidade",
"winsored_Rentabilidade_DIF",
"winsored_Rentabilidade_Anterior",
"winsored_Rentabilidade_PERC")
box_plot(credit, variaveisIniciais, NULL)
É interessante colocar também que aquelas variáveis que foram identificadas como fatores não tiveram um bom relacionamento a preditora, assim foram utilizadas como uma terceira variável de análise (visão) em conjunto com aquelas variáveis que tiveram um melhor resultado na predição:
variaveisSubgrupo <- c("Segmento", "Credenciamento", "Caixa_Seguradora", "Caixa_Seguradora_DIF", "Credito_Salario", "Debito_Automatico", "Credito_Salario_DIF", "Debito_Automatico_DIF")
box_plot(credit, c("winsored_Movimentacoes", "Produtos_Qualificados", "winsored_Aplicacao_PERC", "winsored_Credito_DIF"), variaveisSubgrupo)